home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 1 / Gekikoh Dennoh Club Vol. 1 (Japan).7z / Gekikoh Dennoh Club Vol. 1 (Japan) (Track 1).bin / tools / pcd2 / src / pcd_pf.has < prev    next >
Text File  |  1997-02-27  |  15KB  |  837 lines

  1. **************************************************
  2. * PhotoCD Portfolioに対応部分
  3. *
  4. * 著作権はFa.Tom氏と同じく可能な限り放棄
  5. * 改造等は、貴方の良心に従って下さい
  6. * 実行形式・ソース共、利用に制限はありませんが
  7. * 無保証であることだけは保証します
  8. *                 by まる丸 1997
  9. **************************************************
  10.  
  11.  
  12. *------------------------------
  13. * インクルード&外部参照
  14. *------------------------------
  15.     .include    doscall.mac
  16.     .include    iocscall.mac
  17.  
  18.     .xref    Fsize,Fname
  19.     .xref    PCD_MAIN
  20.     .xref    V_FLAME,GA_wipe,FLG_WP
  21.     .xref    IMAGE_NUM,SW_S,SW_LX,SW_LY,SW_PF,FLG_V,SW_P
  22.     .xref    MS_INIT,MS_CHECK,MScsrON,MScsrOFF,limitB,G_MODE
  23.     .xdef    PF_PLAY,K_Clear,PlayAudioMSF
  24.     .xdef    KEY_DATA,key_chk,Wipe
  25.     .xdef    M_TBL_X,M_TBL_Y,M_TBL_J,SEL
  26.     .xdef    Now,Previous,Next,MenuErr,MN_FLG,W_Time
  27.  
  28. *------------------------------
  29. * プログラム部
  30. *------------------------------
  31.     .cpu    68000
  32.     .text
  33.     .align    4
  34.  
  35. *------------------------------
  36. * ファイル名を調べ
  37. * PLAYLIST.PCDならPortfolio再生
  38. *------------------------------
  39. PF_PLAY:
  40.     movem.l    d2-d5/a0/a5,-(sp)
  41.     move.w    IMAGE_NUM,d2
  42.     move.w    SW_LX,d3
  43.     move.w    SW_LY,d4
  44.     move.w    d0,FHdl
  45.     lea.l    FNAME1,a0
  46.     bsr    namechek
  47.     tst.b    d0
  48.     bne    @f
  49.     st.b    SW_PF
  50.     bsr    PF_INIT
  51.     tst.l    d0
  52.     bmi    PF_exit
  53.     bsr    PF_MAIN
  54.     bsr    PF_END
  55.     bra    PF_exit
  56. @@:    moveq.l    #1,d0
  57. PF_exit:
  58.     move.w    d2,IMAGE_NUM
  59.     move.w    d3,SW_LX
  60.     move.w    d4,SW_LY
  61.     cmpi.b    #2,d2
  62.     beq    @f
  63.     clr.b    FLG_WP
  64. @@:    clr.b    SW_PF
  65.     bsr    K_Clear        *キーバッファクリア
  66.     movem.l    (sp)+,d2-d5/a0/a5
  67.     rts
  68.  
  69. *------------------------------
  70. * 初期設定
  71. *------------------------------
  72. PF_INIT:
  73.     movem.l    d3,-(sp)
  74.     move.l    Fsize,-(sp)    *PLAYLIST.PCDを
  75.     DOS    _MALLOC        *読み込むメモリ
  76.     addq.l    #4,sp        *を確保
  77.     tst.l    d0
  78.     bmi    mem_err_exit
  79.     move.l    d0,a5
  80.     move.l    Fsize,-(sp)    *PLAYLIST.PCDを
  81.     move.l    d0,-(sp)    *読み込み
  82.     move.w    FHdl,-(sp)
  83.     DOS    _READ
  84.     lea    10(sp),sp
  85.     tst.l    d0
  86.     bmi    re_err_exit    *エラーならリターン
  87.     cmp.l    Fsize,d0    *エラーが出なくても
  88.     beq    1f        *正しく読み込めない
  89.     tst.b    SW_P        *場合が有るので
  90.     bne    1f        * -Pで処理を振り分ける
  91.     moveq.l    #-6,d3
  92.     bra    2f
  93. 1:    bsr    MS_INIT        *マウス関連初期化
  94.     bsr    l_space        *画像の表示位置決定
  95.     clr.l    d5        *PLAYLIST.PCDの最初
  96.     clr.l    d0        *初期設定正常
  97.     movem.l    (sp)+,d3
  98.     rts
  99. re_err_exit:
  100.     moveq.l    #-1,d3
  101. 2:    move.l    a5,-(sp)
  102.     DOS    _MFREE
  103.     addq.l    #4,sp
  104.     move.l    d3,d0
  105.     movem.l    (sp)+,d3
  106.     rts
  107. mem_err_exit:
  108.     move.l    #-3,d0
  109.     movem.l    (sp)+,d3
  110.     rts
  111.  
  112. *------------------------------
  113. * PhotoCD Portfolioの再生
  114. *    PLAYLIST.PCDの内容を
  115. *    0(a5,d5) でアクセス
  116. *------------------------------
  117. PF_MAIN:
  118.     movem.l    d7/a6,-(sp)
  119. m_loop:    move.l    d5,d7
  120.     bsr    get_word
  121.     lea.l    (menu_sub),a6
  122.     cmpi.w    #$1000,d0
  123.     beq    @f
  124.     lea.l    (play_sub),a6
  125.     cmpi.w    #$2000,d0
  126.     bne    1f
  127. @@:    jsr    (a6)
  128.     tst.l    d0
  129.     bmi    2f
  130.     move.l    d0,d5
  131.     bra    m_loop
  132. 1:    move.l    #-5,d0        *ファイルが変
  133.     bra    @f
  134. 2:    cmpi.w    #-6,d0        *正常終了か
  135.     bne    @f        *異状ならそのまま
  136.     clr.l    d0        *正常終了なら 0を返す
  137. @@:    movem.l    (sp)+,d7/a6
  138.     rts
  139.  
  140. *------------------------------
  141. * 後片付け
  142. *------------------------------
  143. PF_END:
  144.     movem.l    d0,-(sp)
  145.     move.l    a5,-(sp)
  146.     DOS    _MFREE
  147.     addq.l    #4,sp
  148.  
  149. *    move.l    S_MM,E_MM    *SUSIE対策2
  150. *    bsr    PlayAudioMSF    *演奏停止
  151.  
  152.     pea.l    PAN        *ダミー
  153.     move.w    #$8003,-(sp)    *コマンド番号(停止)
  154.     clr.w    -(sp)        *カレントドライブ
  155.     move.w    #13,-(sp)
  156.     DOS    _IOCTRL        *ドライバコール
  157.     lea.l    10(sp),sp
  158.  
  159.     movem.l    (sp)+,d0
  160.     rts
  161.  
  162. *------------------------------
  163. * メニューの処理
  164. *------------------------------
  165. menu_sub:
  166.     movem.l    d1-d6/a0,-(sp)
  167.     st.b    MN_FLG
  168.     move.l    d7,Now
  169.     bsr    get_byte
  170.     clr.w    d6
  171.     cmpi.b    #100,d0
  172.     bcs    @f
  173.     move.b    #99,d0
  174. @@:    move.b    d0,d6        *選択肢の数
  175.     move.w    d6,SEL
  176.     moveq.l    #3,d1
  177.     lea.l    Previous,a0
  178. @@:    bsr    get_long
  179.     tst.l    d0
  180.     bge    9f
  181.     move.l    d7,d0
  182. 9:    move.l    d0,(a0)+
  183.     dbra    d1,@b
  184.     move.l    d7,MenuErr    *メニューエラーの処理を潰す
  185.     lea.l    M_TBL_J,a0
  186. @@:    bsr    get_word    *大量の0000とFFFFを
  187.     tst.w    d0        *スキップ
  188.     ble    @b
  189.     clr.b    MU_FLG
  190.     bsr    pic_audio    *画像と音声
  191.     add.l    #24,d5
  192.     tst.l    AUDIO_BUF    *音声の再生が有るか
  193.     bne    @f
  194.     add.l    #28,d5        *無ければ音声データ分スキップ
  195. @@:    move.l    d5,d4
  196. 3:    bsr    make_select    *選択肢のテーブルを作成
  197. 1:    tst.l    d0
  198.     bmi    2f
  199.     st    (FLG_V)
  200.     bsr    MScsrON
  201.     move.l    d1,d0
  202.     bsr    wait
  203. @@:    cmpi.b    #103,d0        *スペースキーなら
  204.     bne    @f
  205. 9:    bsr    MS_CHECK    *マウスが押されるか
  206.     tst.w    d0
  207.     bne    @f
  208.     IOCS    _B_KEYSNS    *他のキーが
  209.     tst.l    d0
  210.     beq    9b
  211.     IOCS    _B_KEYINP    *押されるまで
  212.     bsr    key_chk
  213.     bra    @b        *ループ
  214. @@:    bsr    MScsrOFF
  215.     cmpi.b    #104,d0
  216.     bne    @f
  217.     bsr    resize
  218.     move.l    W_Time,d1
  219.     bra    3b
  220. @@:    move.l    TimeOut,d2
  221.     tst.b    d0
  222.     beq    @f
  223.     moveq.l    #0,d2
  224.     cmpi.b    #100,d0
  225.     beq    @f
  226.     move.l    Previous,d2
  227.     cmpi.b    #101,d0
  228.     beq    @f
  229.     move.l    Next,d2
  230.     cmpi.b    #102,d0
  231.     beq    @f
  232.     move.l    #-4,d2
  233.     cmpi.b    #106,d0
  234.     beq    @f
  235.     move.l    #-6,d2
  236.     cmpi.b    #107,d0
  237.     beq    @f
  238.     move.l    MenuErr,d2
  239.     cmp.b    d6,d0
  240.     bhi    @f
  241.     clr.l    d2
  242.     move.b    d0,d2
  243.     subq.b    #1,d2
  244.     add.w    d2,d2
  245.     add.w    d2,d2
  246.     move.l    0(a0,d2.w),d0
  247.     move.l    d0,d2
  248. @@:    move.l    d2,d0
  249.     cmp.l    d7,d0
  250.     bne    2f
  251.     tst.b    SW_S
  252.     beq    @f
  253.     cmpi.w    #2,IMAGE_NUM
  254.     beq    2f
  255. @@:    tst.b    MU_FLG
  256.     beq    4f
  257.     tst.l    d1
  258.     bne    @f
  259. 4:    bsr    PlayAudioMSF
  260.     move.l    W_Time,d1
  261. @@:    clr.l    d0
  262.     bra    1b
  263. 2:    movem.l    (sp)+,d1-d6/a0
  264.     rts
  265.  
  266. make_select:
  267.     movem.l    d0-d2/a0-a1,-(sp)
  268.     move.l    d4,d5
  269.     move.w    SEL,d1
  270.     subq.w    #1,d1
  271.     move.l    d1,d2
  272.     lea.l    M_TBL_J,a0
  273. @@:    bsr    get_long
  274.     move.l    d0,(a0)+
  275.     dbra    d2,@b
  276.     lea.l    M_TBL_X,a0
  277.     lea.l    M_TBL_Y,a1
  278. @@:    bsr    get_byte
  279.     bsr    henkanx
  280.     move.w    d0,(a0)+
  281.     bsr    get_byte
  282.     bsr    henkany
  283.     move.w    d0,(a1)+
  284.     bsr    get_byte
  285.     bsr    henkanx
  286.     move.w    d0,(a0)+
  287.     bsr    get_byte
  288.     bsr    henkany
  289.     move.w    d0,(a1)+
  290.     dbra    d1,@b
  291.     movem.l    (sp)+,d0-d2/a0-a1
  292.     rts
  293.  
  294. henkanx:
  295.     movem.l    d1,-(sp)
  296.     moveq.l    #0,d1
  297.     move.b    d0,d1
  298.     tst.b    G_MODE
  299.     bne    1f
  300.     tst.w    IMAGE_NUM
  301.     bne    @f
  302.     lsr.w    #1,d1
  303.     bra    2f
  304. @@:    cmpi.w    #1,IMAGE_NUM
  305.     beq    2f
  306.     add.w    d1,d1
  307.     bra    2f
  308. 1:    move.w    d1,d0
  309.     add.w    d1,d1
  310.     add.w    d0,d1
  311.     cmpi.w    #2,IMAGE_NUM
  312.     beq    2f
  313.     lsr.w    #1,d1
  314.     tst.w    IMAGE_NUM
  315.     bne    2f
  316.     lsr.w    #1,d1
  317. 2:    add.w    limitB,d1
  318.     add.w    SW_LX,d1
  319.     move.w    d1,d0
  320.     movem.l    (sp)+,d1
  321.     rts
  322.     
  323. henkany:
  324.     movem.l    d1,-(sp)
  325.     moveq.l    #0,d1
  326.     move.b    d0,d1
  327.     tst.w    IMAGE_NUM
  328.     bne    @f
  329.     lsr.w    #1,d1
  330.     bra    1f
  331. @@:    cmpi.w    #1,IMAGE_NUM
  332.     beq    1f
  333.     add.w    d1,d1
  334. 1:    add.w    SW_LY,d1
  335.     move.w    d1,d0
  336.     movem.l    (sp)+,d1
  337.     rts
  338.  
  339. *------------------------------
  340. * 連続再生の処理
  341. *------------------------------
  342. play_sub:
  343.     movem.l    d1/d3-d6,-(sp)
  344.     clr.b    MN_FLG
  345.     move.l    d7,Now
  346.     bsr    get_byte
  347.     clr.w    d6
  348.     move.b    d0,d6        *フレーム数
  349.     bsr    get_long    *このデータ不明
  350.     bsr    get_long
  351.     move.l    d0,Previous
  352.     bsr    get_long
  353.     move.l    d0,Next
  354.     add.l    #25,d5        *意味の無いデータをスキップ
  355.     subq.b    #1,d6
  356. 1:    bsr    get_long
  357.     move.l    d5,d4        *PUSH
  358.     move.l    d0,d5
  359.     bsr    get_word
  360.     bsr    pic_audio    *画像と音声
  361. 2:    tst.l    d0
  362.     bmi    4f
  363.     st    (FLG_V)
  364.     move.l    W_Time,d0
  365.     bsr    wait
  366. @@:    cmpi.b    #103,d0        *スペースなら
  367.     bne    @f
  368. 9:    bsr    MS_CHECK    *マウスが押されるか
  369.     tst.w    d0
  370.     bne    @f
  371.     IOCS    _B_KEYSNS    *他のキーが
  372.     tst.l    d0
  373.     beq    9b
  374.     IOCS    _B_KEYINP    *押されるまで
  375.     bsr    key_chk
  376.     bra    @b        *ループ
  377. @@:    cmpi.b    #104,d0
  378.     bne    @f
  379.     bsr    resize
  380.     bra    2b
  381. @@:    moveq.l    #0,d3
  382.     cmpi.b    #100,d0
  383.     beq    3f
  384.     move.l    Previous,d3
  385.     cmpi.b    #101,d0
  386.     beq    3f
  387.     cmpi.b    #102,d0
  388.     beq    @f
  389.     move.l    #-4,d3
  390.     cmpi.b    #106,d0
  391.     beq    3f
  392.     move.l    #-6,d3
  393.     cmpi.b    #107,d0
  394.     beq    3f
  395.     move.l    d4,d5        *POP
  396.     dbra    d6,1b
  397. @@:    move.l    Next,d3
  398. 3:    move.l    d3,d0
  399. 4:    movem.l    (sp)+,d1/d3-d6
  400.     rts
  401.  
  402. *------------------------------
  403. * 画像サイズ変更
  404. *------------------------------
  405. resize:
  406.     addq.w    #1,IMAGE_NUM
  407.     cmpi.w    #2,IMAGE_NUM
  408.     bls    @f
  409.     clr.w    IMAGE_NUM
  410.     bsr    Wipe
  411. @@:    bsr    l_space
  412.     bsr    disp_pcd
  413.     rts
  414.  
  415. *------------------------------
  416. * 画面消去
  417. *------------------------------
  418. Wipe:
  419.     st.b    FLG_WP
  420.     tst.l    V_FLAME
  421.     bge    @f
  422.     tst.b    SW_S
  423.     bne    1f
  424.     movem.l    d0-d1,-(sp)
  425.     IOCS    _WIPE
  426.     movem.l    (sp)+,d0-d1
  427. 1:    rts
  428. @@:    bsr    GA_wipe
  429.     rts
  430.  
  431. *------------------------------
  432. * 画像の表示位置決定
  433. *------------------------------
  434. l_space:
  435.     movem.l    d0-d1/a0,-(sp)
  436.     lea.l    XY_SP,a0
  437.     move.w    IMAGE_NUM,d1
  438.     lsl.w    #1,d1
  439.     move.w    0(a0,d1.w),d0
  440.     move.w    d0,SW_LY
  441.     tst.l    V_FLAME
  442.     bmi    1f
  443.     move.w    12(a0,d1.w),d0
  444.     bra    @f
  445. 1:    tst.b    SW_S
  446.     beq    @f
  447.     move.w    6(a0,d1.w),d0
  448. @@:    move.w    d0,SW_LX
  449.     movem.l    (sp)+,d0-d1/a0
  450.     rts
  451.  
  452. *------------------------------
  453. * d0.lの時間キー入力を待つ
  454. *------------------------------
  455. wait:
  456.     move.l    d0,d1
  457.     clr.l    d0
  458.     move.w    KEY_DATA,d0
  459.     beq    @f
  460.     bpl    2f
  461.     clr.l    d0
  462.     bra    2f
  463. @@:    bsr    time_clr
  464. @@:    IOCS    _B_KEYSNS
  465.     tst.l    d0
  466.     beq    1f
  467.     bsr    key_chk
  468.     tst.l    d0
  469.     bne    @f
  470.     bsr    K_Clear        *キーバッファクリア
  471. 1:    bsr    MS_CHECK
  472.     tst.l    d0
  473.     bne    2f
  474.     bsr    time_get
  475.     cmp.l    d1,d0
  476.     bcs    @b
  477.     clr.l    d0
  478.     bra    2f
  479. @@:    IOCS    _B_KEYINP
  480.     bsr    key_chk
  481. 2:    bsr    K_Clear        *キーバッファクリア
  482.     clr.w    KEY_DATA
  483.     move.l    d0,-(sp)
  484.     bsr    time_get
  485.     sub.l    d0,d1
  486.     bge    @f
  487.     clr.l    d1
  488. @@:    move.l    (sp)+,d0
  489.     rts
  490.  
  491. *------------------------------
  492. * キーバッファのクリア
  493. *------------------------------
  494. K_Clear:
  495.     movem.l    d0,-(sp)    *IOCSCALLを使うより
  496. @@    move.w    #6,-(sp)    *DOSCALLの方が確実に
  497.     move.w    #$ff,-(sp)    *バッファを消去
  498.     DOS    _KFLUSH        *出来るようだ
  499.     addq.l    #4,sp
  500.     tst.l    d0
  501.     bne    @b
  502.     movem.l    (sp)+,d0
  503.     rts
  504.  
  505. *------------------------------
  506. * B_KEYSNS B_KEYINPで得られた
  507. * d0.lを都合のいいように変換
  508. *------------------------------
  509. key_chk:
  510.     movem.l    d1-d2,-(sp)
  511.     move.b    d0,d2
  512.     lsr.w    #8,d0
  513.     moveq.l    #100,d1
  514.     cmpi.b    #$6*8+6,d0    * HOME
  515.     beq    @f
  516.     moveq.l    #101,d1
  517.     cmpi.b    #$7*8+1,d0    * ROLL DOWN
  518.     beq    @f
  519.     moveq.l    #102,d1
  520.     cmpi.b    #$7*8+0,d0    * ROLL UP
  521.     beq    @f
  522.     moveq.l    #103,d1
  523.     cmpi.b    #$6*8+5,d0    * SPACE
  524.     beq    @f
  525.     moveq.l    #104,d1
  526.     cmpi.b    #$7*8+2,d0    * UNDO
  527.     beq    @f
  528.     moveq.l    #105,d1
  529.     cmpi.b    #$a*8+4,d0    * HELP
  530.     beq    @f
  531.     moveq.l    #106,d1
  532.     cmpi.b    #$0*8+1,d0    * ESC
  533.     beq    @f
  534.     moveq.l    #107,d1
  535.     cmpi.b    #$3*8+5,d0    * CR
  536.     beq    @f
  537.     moveq.l    #107,d1
  538.     cmpi.b    #$9*8+6,d0    * ENTER
  539.     beq    @f
  540.     moveq.l    #0,d1
  541.     cmpi.b    #'0',d2
  542.     bls    @f
  543.     cmpi.b    #'9',d2
  544.     bhi    @f
  545.     move.b    d2,d1
  546.     andi.b    #$0f,d1
  547. @@:    move.l    d1,d0
  548.     movem.l    (sp)+,d1-d2
  549.     rts
  550.  
  551. *------------------------------
  552. * 絵を表示して音声データ再生
  553. *------------------------------
  554. pic_audio:
  555.     movem.l    d2-d4/a0,-(sp)    *d0.wに$3?01が入った状態
  556.     lea.l    AUDIO_BUF,a0
  557.     clr.l    d2        *待時間合計を入れる
  558.     bsr    get_word    *絵の番号
  559.     bsr    Name_set    *絵の表示準備
  560.     bsr    get_byte    *表示解像度か?表示可能解像度か?
  561.     bsr    get_byte    *待時間1(1/2秒)
  562.     move.b    d0,d2
  563.     add.l    #10,d5        *意味不明データをスキップ
  564.     bsr    get_byte
  565.     cmpi.b    #$40,d0        *音声データか?
  566.     bne    2f
  567.     clr.l    d0
  568.     moveq.l    #1,d1
  569. 0:    moveq.l    #2,d3
  570. 1:    bsr    get_byte
  571.     move.b    d0,d4        *10進データを16進数に変換
  572.     andi.b    #$0f,d4        * もっとスマートな方法が
  573.     lsr.b    #4,d0        * 有りそうなもんだが
  574.     mulu.w    #10,d0
  575.     add.b    d4,d0
  576.     move.b    d0,(a0)+    *MSFデータ書き込み
  577.     dbra    d3,1b
  578.     clr.b    (a0)+
  579.     dbra    d1,0b
  580.     clr.l    d0
  581.     move.b    E_MM,d0        *終了分を
  582.     sub.b    S_MM,d0        *開始分から引いて
  583.     mulu.w    #120,d0        *1/2秒に直して
  584.     add.l    d0,d2        *待時間に足す
  585.     clr.l    d0
  586.     move.b    E_SS,d0        *終了秒を
  587.     add.l    d0,d0        *2倍し
  588.     add.l    d0,d2        *待時間に足して
  589.     move.b    S_SS,d0        *開始秒を
  590.     add.l    d0,d0        *2倍して
  591.     sub.l    d0,d2        *待時間から引く
  592.     mulu.w    #50,d2        *50倍すると1/100秒
  593.     move.b    E_FF,d0        *終了フレーム(1/75秒)を
  594.     bsr    ff2bs        *1/100秒に変換
  595.     add.l    d0,d2        *待時間に足して
  596.     clr.l    d0
  597.     move.b    S_FF,d0        *開始フレームを
  598.     bsr    ff2bs        *1/100秒に変換
  599.     sub.l    d0,d2        *待時間合計から引く
  600.     clr.l    d0
  601.     bsr    get_byte    *待時間2(1/2秒)
  602.     mulu.w    #50,d0        *50倍(1/100秒)
  603.     add.l    d0,d2        *待時間合計に足す
  604.     add.l    #20,d5        *意味不明データをスキップ
  605.     bra    3f
  606. 2:    subq.l    #1,d5
  607.     clr.l    (a0)
  608.     mulu.w    #50,d2
  609. 3:    addq.l    #1,d2        *誤差補正の意味で +1
  610.     exg    d2,d1        *d1に待時間合計を返す(1/100)
  611.     move.l    d1,W_Time
  612.     bsr    disp_pcd    *絵の表示+演奏
  613.     movem.l    (sp)+,d2-d4/a0
  614.     rts
  615.  
  616. *------------------------------
  617. * 1/75を1/100に変換
  618. *------------------------------
  619. ff2bs:
  620.     mulu.w    #100,d0        *100倍して
  621.     divu.w    #75,d0        *75で割れば
  622.     swap    d0        *1/100秒に
  623.     clr.w    d0        *なる
  624.     swap    d0
  625.     rts
  626.  
  627. *------------------------------
  628. * PLAYLIST.PCDの内容をd0に読む
  629. *------------------------------
  630. get_byte:
  631.     move.b    0(a5,d5.l),d0
  632.     addq.l    #1,d5
  633.     rts
  634.  
  635. get_word:
  636.     bsr    get_byte
  637.     lsl.w    #8,d0
  638.     bsr    get_byte
  639.     rts
  640.  
  641. get_long:
  642.     bsr    get_word
  643.     swap    d0
  644.     bsr    get_word
  645.     rts
  646.  
  647. *------------------------------
  648. * a0.l からの文字列と
  649. *    Fnameの比較
  650. *------------------------------
  651. namechek:
  652.     movem.l    a1,-(sp)
  653.     lea.l    Fname,a1
  654. @@:    move.b    (a0),d0
  655.     or.b    (a1),d0
  656.     cmp.b    (a0)+,(a1)+
  657.     bne    @f
  658.     tst.b    d0
  659.     bne    @b
  660. @@:    movem.l    (sp)+,a1
  661.     rts
  662.  
  663. *-------------------------------
  664. * オーディオトラック再生
  665. * CD-ROMドライバをコールするのみ
  666. *-------------------------------
  667. PlayAudioMSF:
  668.     tst.b    SW_PF        *Portforioモードか
  669.     beq    @f        *違ったらリターン
  670.     st.b    MU_FLG
  671.     tst.l    AUDIO_BUF    *音声データは有るか
  672.     beq    @f        *無かったらリターン
  673.     movem.l    d0,-(sp)
  674.     move.b    #3,PAN        *ステレオ
  675.     pea.l    PAN        *パンポット制御
  676.     move.w    #$8005,-(sp)    *コマンド番号
  677.     clr.w    -(sp)        *カレントドライブ
  678.     move.w    #13,-(sp)
  679.     DOS    _IOCTRL        *ドライバコール
  680.     lea.l    10(sp),sp
  681.     pea.l    AUDIO_BUF    *MSF再生
  682.     move.w    #$8001,-(sp)    *コマンド番号
  683.     clr.w    -(sp)        *カレントドライブ
  684.     move.w    #13,-(sp)
  685.     DOS    _IOCTRL        *ドライバコール
  686.     lea.l    10(sp),sp
  687.     movem.l    (sp)+,d0
  688. @@:    rts
  689.  
  690. *----------------------------------
  691. * time_clrからの時間を1/100秒で返す
  692. *----------------------------------
  693. time_get:
  694.     movem.l    d1,-(sp)
  695.     IOCS    _ONTIME
  696.     sub.l    time,d0
  697.     bge    @f
  698.     add.l    #8640000,d0
  699. @@:    movem.l    (sp)+,d1
  700.     rts
  701.  
  702. *------------------------------
  703. * タイマーの初期化
  704. *------------------------------
  705. time_clr:
  706.     movem.l    d0-d1,-(sp)
  707.     IOCS    _ONTIME
  708.     move.l    d0,time
  709.     movem.l    (sp)+,d0-d1
  710.     rts
  711.  
  712. *------------------------------
  713. * 絵の表示
  714. *------------------------------
  715. disp_pcd:
  716.     clr.w    -(sp)
  717.     pea.l    name_buff
  718.     DOS    _OPEN
  719.     addq.l    #6,sp
  720.     tst.l    d0
  721.     bmi    @f
  722.     move.w    d0,FHdl
  723.     bsr    PCD_MAIN
  724.     movem.l    d0,-(sp)
  725.     move.w    FHdl,-(sp)
  726.     DOS    _CLOSE
  727.     addq.l    #2,sp
  728.     movem.l    (sp)+,d0
  729.     rts
  730. @@:    move.l    #-1,d0
  731.     rts
  732.  
  733. *------------------------------
  734. * 入力 d0.w 絵の番号
  735. * 出力 name_buff
  736. *     表示するファイル名
  737. *------------------------------
  738. Name_set:
  739.     movem.l    d0-d1/a0-a1,-(sp)
  740.     lea.l    r_name,a0
  741.     lea.l    name_buff,a1
  742. @@:    move.b    (a0)+,(a1)+
  743.     bne    @b
  744.     subq.l    #1,a1
  745.     bsr    bin2asc
  746.     moveq.l    #3,d1
  747. @@:    move.b    d0,(a1)+
  748.     lsr.l    #8,d0
  749.     dbra    d1,@b
  750.     move.b    #'.',(a1)+
  751.     move.b    #'P',(a1)+
  752.     move.b    #'C',(a1)+
  753.     move.b    #'D',(a1)+
  754.     clr.b    (a1)
  755.     movem.l    (sp)+,d0-d1/a0-a1
  756.     rts
  757.  
  758. *------------------------------
  759. * d0.wの数値をASCIIコードに変換
  760. * d0.lへ  ただし順番が逆
  761. *------------------------------
  762. bin2asc:
  763.     movem.l    d1-d2,-(sp)
  764.     clr.l    d1
  765.     move.w    d0,d1
  766.     moveq.l    #3,d2
  767. @@:    lsl.l    #8,d0
  768.     divu.w    #10,d1
  769.     swap    d1
  770.     move.b    d1,d0
  771.     ori.b    #'0',d0
  772.     clr.w    d1
  773.     swap    d1
  774.     dbra    d2,@b
  775.     movem.l    (sp)+,d1-d2
  776.     rts
  777.  
  778. *------------------------------
  779. * 固定データ
  780. *------------------------------
  781.     .data
  782.     .align    4
  783. XY_SP:    .dc.w    192,128,0
  784.     .dc.w    160,64,0
  785.     .dc.w    288,192,0
  786. FNAME1:    .dc.b    'PLAYLIST.PCD',0
  787. r_name:    .dc.b    '\PHOTO_CD\IMAGES\IMG',0
  788.  
  789. *------------------------------
  790. * ワークエリア
  791. *------------------------------
  792.     .bss
  793.     .align    4
  794. name_buff:
  795.     .ds.b    32
  796. Now:
  797.     .ds.l    1
  798. Previous:
  799.     .ds.l    1
  800. Next:
  801.     .ds.l    1
  802. MenuErr:
  803.     .ds.l    1
  804. TimeOut:
  805.     .ds.l    1
  806. time:
  807.     .ds.l    1
  808. M_TBL_X:
  809.     .ds.l    99
  810. M_TBL_Y:
  811.     .ds.l    99
  812. M_TBL_J:
  813.     .ds.l    99
  814.  
  815. AUDIO_BUF:
  816. S_MM:    .ds.b    1
  817. S_SS:    .ds.b    1
  818. S_FF:    .ds.b    1
  819.     .ds.b    1
  820. E_MM:    .ds.b    1
  821. E_SS:    .ds.b    1
  822. E_FF:    .ds.b    1
  823.     .ds.b    1
  824.  
  825. FHdl:    .ds.w    1
  826.  
  827. W_Time:
  828.     .ds.l    1
  829. KEY_DATA:
  830.     .ds.w    1
  831. SEL:
  832.     .ds.w    1
  833.  
  834. PAN:    .ds.b    1
  835. MN_FLG:    .ds.b    1
  836. MU_FLG:    .ds.b    1
  837.